/*
* Copyright (c) 2016.2，华乘电气科技有限公司
* All rights reserved.
*
* 文件名称：DesCrypto.h
*
* 初始版本：1.0
* 作者：
* 创建日期：2016年2月26日
* 摘要：该文件主要是定义基于DES的加密模块
*
*/
#ifndef DESCRYPT_H
#define DESCRYPT_H
#include <QtCore>
#include "crypto_global.h"

typedef bool Bit;
typedef bool (*PSubKey)[16][48];


class CRYPTOSHARED_EXPORT DesCrypto
{
public:
    //DES算法的模式
    typedef enum _DesMode
    {
        ECB		=	0,	//! ECB模式
        CBC				//! CBC模式
    }DesMode;

    /************************************************
     * 函数名    :DesCrypto
     * 输入参数  ：
     *      baKey -- 密钥
     *      mode -- 算法
     * 输出参数  ：NULL
     * 返回值   ：NULL
     * 功能     ：构造函数
     ************************************************/
    DesCrypto( const QByteArray& baKey, DesMode mode = ECB );

    /************************************************
     * 函数名    :~DesCrypto
     * 输入参数  ：void
     * 输出参数  ：NULL
     * 返回值   ：NULL
     * 功能     ：析构函数
     ************************************************/
    ~DesCrypto();

    /************************************************
     * 函数名    :enCrypt
     * 输入参数  ：
     *      data -- 需要加密的数据
     * 输出参数  ：NULL
     * 返回值   ：
     *      加密后的数据
     * 功能     ：加密
     ************************************************/
    QByteArray enCrypt( const QByteArray& data );

    /************************************************
     * 函数名    :deCrypt
     * 输入参数  ：
     *      data -- 需要解密的数据
     * 输出参数  ：NULL
     * 返回值   ：
     *      解密后的数据
     * 功能     ：解密
     ************************************************/
    QByteArray deCrypt( const QByteArray& data );
private:
    QByteArray m_baKey;
    DesMode m_mode;
};


#endif // DESCRYPT_H

